'''
题目描述
入职后，导师会请你吃饭，你选择了火锅。
火锅里会在不同时间下很多菜。
不同食材要煮不同的时间，才能变得刚好合适。
你希望吃到最多的刚好合适的菜，但你的手速不够快，用m代表手速，每次下手捞菜后至少要过m秒才能再捞（每次只能捞一个）。
那么用最合理的策略，最多能吃到多少刚好合适的菜？
输入描述
第一行两个整数n，m，其中n代表往锅里下的菜的个数，m代表手速。
接下来有n行，每行有两个数x，y代表第x秒下的菜过y秒才能变得刚好合适。
（1 < n, m < 1000）（1 < x, y < 1000）
输出描述
输出一个整数代表用最合理的策略，最多能吃到刚好合适的菜的数量。
示例1 输入输出示例仅供调试，后台判题数据一般不包含示例
输入：
    2 1
    1 2
    2 1
输出：
    1
————————————————
原文链接：https://blog.csdn.net/qq_27695659/article/details/125648342
'''

from typing import List



def EatHotPot(n:int, m:int, x_dish:List[int], y_dish:List[int]) -> int:
    '''
    令arrtime第一个值为0，
    第一道可以吃的菜的时间大于手速就可以被吃到，
    这以后，每前一道菜的时间 + 手速 的总时间 只要小于当前的菜的时间，那么这道菜就可以被吃
    '''
    arrtime = [0] # 缓存菜可以吃的时间
    cnt = 0 # 吃到菜的次数
    for i in range(n):
        arrtime.append(x_dish[i] + y_dish[i])
    arrtime.sort()

    print(arrtime)
    pre = 0 # 记录上一次吃菜的时间
    eaten = [] # 记录吃到 什么时候 下的菜
    for i in range(1, n+1):
        if arrtime[i] >= pre + m :
            cnt += 1
            pre = arrtime[i]
            eaten.append(x_dish[i-1])

    print(eaten)
    return cnt



if __name__ == '__main__':
    n, m = list(map(int, input().split()))
    x_dish = []  # 下菜时间
    y_dish = []  # 煮菜时长
    for i in range(n):
        temp = list(map(int, input().split()))
        x_dish.append(temp[0])
        y_dish.append(temp[1])

    print(EatHotPot(n, m, x_dish, y_dish))


'''
5 1
1 2
2 1
3 2
4 1
5 1
'''















